package com.odontosis.entidade;

import java.math.BigDecimal;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.hibernate.validator.NotNull;

/**
 * 
 * @author pablo
 *
 */
@Entity
@Table(name = "pagamento")
public class Pagamento extends OdontosisBusinessObject {
	private static final long serialVersionUID = 1L;
	
	@ManyToOne
	@JoinColumn(name = "servico")
	private Servico servico;
	
	@Column(name = "valor")
	private Double valor;
	
	@Column(name = "mesVencimento")
	private Integer mesVencimento;
	
	@Column(name = "anoVencimento")
	private Integer anoVencimento;
	
	@Column(name = "pago")
	private boolean pago;
	
	@Column(name = "justificativa")
	private String justificativa;
	
	@ManyToOne
	@JoinColumn(name = "usuario_cancelamento")
	private Usuario usuarioCancelamento;
	
	@OneToMany(fetch = FetchType.LAZY)
	@JoinColumn(name = "pagamento")
	private List<Recibo> listaRecibos;
	
	@OneToMany(fetch = FetchType.LAZY)
	@JoinColumn(name = "pagamento")
	private List<ReciboDetalhe> listaRecibosDetalhe;

	public List<ReciboDetalhe> getListaRecibosDetalhe() {
		return listaRecibosDetalhe;
	}

	public void setListaRecibosDetalhe(List<ReciboDetalhe> listaRecibosDetalhe) {
		this.listaRecibosDetalhe = listaRecibosDetalhe;
	}

	public Servico getServico() {
		return servico;
	}

	public void setServico(Servico servico) {
		this.servico = servico;
	}

	public Double getValor() {
		return valor;
	}

	public void setValor(Double valor) {
		this.valor = valor;
	}

	public Integer getMesVencimento() {
		return mesVencimento;
	}

	public void setMesVencimento(Integer mesVencimento) {
		this.mesVencimento = mesVencimento;
	}

	public Integer getAnoVencimento() {
		return anoVencimento;
	}

	public void setAnoVencimento(Integer anoVencimento) {
		this.anoVencimento = anoVencimento;
	}

	public boolean isPago() {
		return pago;
	}

	public void setPago(boolean pago) {
		this.pago = pago;
	}

	public List<Recibo> getListaRecibos() {
		return listaRecibos;
	}

	public void setListaRecibos(List<Recibo> listaRecibos) {
		this.listaRecibos = listaRecibos;
	}

	public String getJustificativa() {
		return justificativa;
	}

	public void setJustificativa(String justificativa) {
		this.justificativa = justificativa;
	}
	
	@Transient
	public String getNumeroParcela(){
		Integer mes = getServico().getMesVencimentoPrimeiraParcela() - 1;
		Integer mesParcela = getMesVencimento();
		Integer diferenca = mesParcela - mes;
		if(diferenca < 0){
			diferenca += 12;
		}
		return diferenca.toString(); 
	}

	public Usuario getUsuarioCancelamento() {
		return usuarioCancelamento;
	}

	public void setUsuarioCancelamento(Usuario usuarioCancelamento) {
		this.usuarioCancelamento = usuarioCancelamento;
	}
	
	
}
